home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Mac Power 1997 December
/
MACPOWER-1997-12.ISO.7z
/
MACPOWER-1997-12.ISO
/
AMUG
/
PROGRAMMING
/
Raven 1.2 Examples.sit
/
Raven 1.2 Examples
/
Quill
/
Source
/
PenNode.cpp
< prev
next >
Wrap
Text File
|
1997-05-04
|
5KB
|
206 lines
/*
* File: PenNode.cpp
* Summary: A node representing an SPen resource for use in a THierarchicalTable.
* Written by: Jesse Jones
*
* Copyright ゥ 1997 Jesse Jones.
* For conditions of distribution and use, see copyright notice in ZTypes.h
*
* Change History (most recent first):
*
* <1> 5/04/97 JDJ Created
*/
#include "PenNode.h"
#include <ZHandleStream.h>
#include <ZStringUtils.h>
#include <ZUndoableCommand.h>
#include "PenDialog.h"
// ===================================================================================
// class CSetPenCommand
// ===================================================================================
class CSetPenCommand : public TUndoableCommand {
typedef TUndoableCommand Inherited;
//-----------------------------------
// Initialization/Destruction
//
public:
virtual ~CSetPenCommand();
CSetPenCommand(CResourceMap* rsrcMap, ResID id, const SPen& newPen);
//-----------------------------------
// Inherited API
//
public:
virtual string GetText() const;
protected:
virtual void OnDo();
virtual void OnUndo();
virtual void OnRedo();
//-----------------------------------
// Member data
//
protected:
CResourceMap* mRsrcMap;
ResID mID;
THandle mOldData;
THandle mNewData;
};
//---------------------------------------------------------------
//
// CSetPenCommand::~CSetPenCommand
//
//---------------------------------------------------------------
CSetPenCommand::~CSetPenCommand()
{
}
//---------------------------------------------------------------
//
// CSetPenCommand::CSetPenCommand
//
//---------------------------------------------------------------
CSetPenCommand::CSetPenCommand(CResourceMap* rsrcMap, ResID id, const SPen& newPen)
{
ASSERT(rsrcMap != nil);
mRsrcMap = rsrcMap;
mID = id;
mOldData = mRsrcMap->GetResourceData(mID);
mOldData.Detach();
TOutHandleStream stream;
stream << newPen;
mNewData = stream.GetHandle();
}
//---------------------------------------------------------------
//
// CSetPenCommand::GetText
//
//---------------------------------------------------------------
string CSetPenCommand::GetText() const
{
return LoadIndString(256, 29);
}
//---------------------------------------------------------------
//
// CSetPenCommand::OnDo
//
//---------------------------------------------------------------
void CSetPenCommand::OnDo()
{
mRsrcMap->SetResourceData(mID, mNewData);
}
//---------------------------------------------------------------
//
// CSetPenCommand::OnUndo
//
//---------------------------------------------------------------
void CSetPenCommand::OnUndo()
{
mRsrcMap->SetResourceData(mID, mOldData);
}
//---------------------------------------------------------------
//
// CSetPenCommand::OnRedo
//
//---------------------------------------------------------------
void CSetPenCommand::OnRedo()
{
mRsrcMap->SetResourceData(mID, mNewData);
}
#pragma mark -
// ===================================================================================
// class CPenNode
// ===================================================================================
//---------------------------------------------------------------
//
// CPenNode::~CPenNode
//
//---------------------------------------------------------------
CPenNode::~CPenNode()
{
}
//---------------------------------------------------------------
//
// CPenNode::CPenNode (THierarchicalTable*, CResourceMap*)
//
//---------------------------------------------------------------
CPenNode::CPenNode(THierarchicalTable* table, CResourceMap* rsrcMap) : CResourceNode(table, rsrcMap)
{
}
//---------------------------------------------------------------
//
// CPenNode::CPenNode (THierarchicalTable*, TSubNode*, CResourceMap*, ResID)
//
//---------------------------------------------------------------
CPenNode::CPenNode(THierarchicalTable* table, TSubNode* parent, CResourceMap* rsrcMap, ResID id) : CResourceNode(table, parent, rsrcMap, id)
{
}
//---------------------------------------------------------------
//
// CPenNode::Make
//
//---------------------------------------------------------------
CResourceNode* CPenNode::Make(TSubNode* parent, ResID id)
{
return new CPenNode(mTable, parent, mRsrcMap, id);
}
//---------------------------------------------------------------
//
// CPenNode::EditResource
//
//---------------------------------------------------------------
void CPenNode::EditResource()
{
SPen oldPen, newPen;
THandle data = mRsrcMap->GetResourceData(mID);
if (data.GetSize() > 0) {
TInHandleStream stream(data);
stream >> oldPen;
}
if (CPenDialog::Pose(mRsrcMap->GetResourceName(mID), oldPen, &newPen)) {
TCommand* command = new CSetPenCommand(mRsrcMap, mID, newPen);
command->Post();
}
}